package com.jingtao.product.service;

import com.jingtao.product.domain.DTO.ProductCategoryDTO;
import com.jingtao.product.domain.DTO.ProductCategoryWithChildrenItem;
import com.jingtao.product.domain.ProductCategory;
import com.jingtao.product.domain.request.ProductCategoryParam;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @ClassName:
 * @Description:
 * @Author: zengfanzhen
 * @Date: 2024/3/29 16:55:30
 */
public interface ProductCategoryService {


    /**
     * 创建商品分类
     */
    @Transactional
    int create(ProductCategoryParam pmsProductCategoryParam);

    /**
     * 修改商品分类
     */
    @Transactional
    int update(Long id, ProductCategoryParam pmsProductCategoryParam);

    /**
     * 分页获取商品分类
     */
    List<ProductCategory> getList(Long parentId, Integer pageSize, Integer pageNum);

    /**
     * 删除商品分类
     */
    int delete(Long id);

    /**
     * 根据ID获取商品分类
     */
    ProductCategory getItem(Long id);

    /**
     * 批量修改导航状态
     */
    int updateNavStatus(List<Long> ids, Integer navStatus);

    /**
     * 批量修改显示状态
     */
    int updateShowStatus(List<Long> ids, Integer showStatus);

    /**
     * 以层级形式获取商品分类
     */
    List<ProductCategoryWithChildrenItem> listWithChildren();


    List<ProductCategory> getProductCategoryList();

    List<ProductCategory> getAllProductCategoriesWithChildren(List<ProductCategory> parentCategories );

    /**
     * 获取所有商品分类数据（包括子分类）
     * @return 所有商品分类数据列表
     */
    List<ProductCategoryDTO> getAllCategories();

    /**
     * 递归查询子分类
     * @param parentId 父分类ID
     * @return 子分类列表
     */
    List<ProductCategoryDTO> listSubCategories(Long parentId);


}
